package controllers

import (
	"beegoProject/models"
	"beegoProject/vender/ali"
	"github.com/astaxie/beego"
)

type UserController struct {
	beego.Controller
}

//方法名首字母必须大写

func (c *UserController) UserInfo() {
	c.Ctx.WriteString("测试")
}

// 编写一个注册接口  只需接收注册时的信息即可   直接将注册信息入库即可  入库成功后返回入库成功的提示
// 使用orm创建数据表
// User -> name 姓名  nick_name 昵称 sex 性别 mobile 手机号 password 密码 created_time 注册时间
func (c *UserController) Register() {
	//接值
	name := c.GetString("name")
	nick_name := c.GetString("nick_name")
	sex, _ := c.GetInt("sex")
	mobile := c.GetString("mobile")
	password := c.GetString("password")
	rePassword := c.GetString("rePassword")
	//判断两次输入的密码是否一致
	if password != rePassword {
		c.Data["json"] = ApiFailed(400, "两次输入的密码不一致")
		c.ServeJSON()
		return
	}
	//判断手机号是否合法 只判断位数
	if len(mobile) != 11 {
		c.Data["json"] = ApiFailed(400, "手机号不合法")
		c.ServeJSON()
		return
	}
	//入库之前判断手机号是否已经被注册
	//data := models.CheckMobile(mobile)
	//if data {
	//	c.Data["json"] = ApiFailed(400, "手机号已经被注册")
	//	c.ServeJSON()
	//	return
	//}
	//将密码加密
	password = EnCodeMd5(password)
	//入库
	//count := models.Register(name, nick_name, sex, mobile, password)
	count := models.RegisterByGorm(name, nick_name, sex, mobile, password)
	c.Data["json"] = ApiSucc(200, "注册成功", nil, count)
	c.ServeJSON()
}

// 发送短信
func (c *UserController) SendSmsCode() {
	//接值
	mobile := c.GetString("mobile")
	//判断手机号是否合法
	if len(mobile) != 11 {
		c.Data["json"] = ApiFailed(400, "手机号不合法")
		c.ServeJSON()
		return
	}
	//判断手机号是否已经被注册
	data := models.CheckMobile(mobile)
	if data {
		c.Data["json"] = ApiFailed(400, "手机号已经被注册")
		c.ServeJSON()
		return
	}
	//短信验证码
	code := Createcode()
	//发送短信
	ali.SendSmsCode(mobile, code)
	c.Data["json"] = ApiSucc(200, "发送成功", nil, 0)
	c.ServeJSON()
}

// 修改手机号  拿到原来的手机号和新的手机号 -> 通过原来的手机号查询用户信息-> 把新的手机号赋值给手机号字段进行修改->返回修改后的用户信息
func (c *UserController) UpdateMobile() {
	//接值
	mobile := c.GetString("mobile")
	newMobile := c.GetString("newMobile")
	//通过手机号获取用户信息
	//userInfo := models.GetUserInfoByMobile(mobile)
	userInfo := models.GetUserInfoByMobileByGorm(mobile)
	//修改操作
	//result := models.UpdateMobile(userInfo, newMobile)
	result := models.UpdateMobileByGorm(userInfo, newMobile)
	c.Data["json"] = ApiSucc(200, "修改成功", result, 0)
	c.ServeJSON()
}

// 修改用户名  拿到原来的用户信息 ->进行修改
func (c *UserController) UpdateName() {
	//接值
	name := c.GetString("name")
	userId, _ := c.GetInt("user_id")
	//先通过userId获取用户信息
	user := models.GetUserInfoByUserId(userId)
	//直接修改
	userInfo := models.UpdataUserInfo(name, user)
	c.Data["json"] = ApiSucc(200, "修改成功", userInfo, 0)
	c.ServeJSON()
}

// 通过userId 删除某个用户
func (c *UserController) DeleteUserByUserId() {
	//接值
	userId, _ := c.GetInt("user_id")
	//先判断用户是否存在
	//user := models.GetUserInfoByUserId(userId)
	//if user.Id == 0 {
	//	c.Data["json"] = ApiFailed(400, "用户不存在")
	//	c.ServeJSON()
	//	return
	//}
	//删除操作
	//models.DeleteUserByUserId(userId)
	models.DeleteUserByUserIdAndGorm(userId)
	c.Data["json"] = ApiSucc(200, "删除成功", nil, 0)
	c.ServeJSON()
}
